package AircraftDesignKg.entity;

import lombok.Data;
import java.util.List;

/**
 * DeepSeek API 响应实体类
 * Author: congwey
 */
@Data
public class DeepSeekResponse {

    /**
     * 本次请求的唯一标识符
     * 示例："accd2f43-c41f-41cc-ae6a-346fd64aced3"
     */
    private String id;

    /**
     * 对象类型，固定为"chat.completion"
     */
    private String object;

    /**
     * 创建时间戳（Unix 时间，秒级）
     * 示例：1750266669
     */
    private long created;

    /**
     * 使用的模型名称
     * 示例："deepseek-chat"
     */
    private String model;

    /**
     * 模型生成的回复选项列表
     * 通常包含一个选项（当 n=1 时）
     */
    private List<Choice> choices;

    /**
     * Token 使用统计信息
     */
    private Usage usage;

    /**
     * 系统指纹，用于追踪模型版本
     * 示例："fp_8802369eaa_prod0425fp8"
     */
    private String systemFingerprint;

    /**
     * 对话选项（每个选项对应一个可能的回复）
     */
    @Data
    public static class Choice {

        /**
         * 选项索引（从 0 开始）
         */
        private int index;

        /**
         * 模型生成的消息内容
         */
        private Message message;

        /**
         * Token 概率信息（当前版本返回 null）
         * 可替换为具体类型如果未来版本返回数据结构
         */
        private Object logprobs;

        /**
         * 停止生成的原因
         * 可能值："stop"（正常结束）、"length"（达到最大 token 限制）
         * 示例："stop"
         */
        private String finishReason;

        /**
         * 消息实体
         */
        @Data
        public static class Message {

            /**
             * 消息角色
             * "system"：系统设置消息
             * "user"：用户输入
             * "assistant"：模型回复
             */
            private String role;

            /**
             * 消息文本内容
             * 示例："Hello! How can I assist you today? 😊"
             */
            private String content;
        }
    }

    /**
     * Token 使用统计
     */
    @Data
    public static class Usage {

        /**
         * 用户输入消耗的 token 数量
         * 示例：9
         */
        private int promptTokens;

        /**
         * 模型回复消耗的 token 数量
         * 示例：11
         */
        private int completionTokens;

        /**
         * 总 token 消耗量（输入+输出）
         * 示例：20
         */
        private int totalTokens;

        /**
         * 输入 token 的详细统计
         */
        private PromptTokensDetails promptTokensDetails;

        /**
         * 命中缓存的 token 数量（减少实际消耗）
         * 示例：0
         */
        private int promptCacheHitTokens;

        /**
         * 未命中缓存的 token 数量（实际消耗的输入 token）
         * 示例：9
         */
        private int promptCacheMissTokens;

        /**
         * 输入 token 的详细统计信息
         */
        @Data
        public static class PromptTokensDetails {

            /**
             * 从缓存中复用的 token 数量
             * 示例：0
             */
            private int cachedTokens;
        }
    }
}